package cn.tedu.csmall.cart.webapi.kafka;

import cn.tedu.csmall.commons.pojo.cart.model.CartTb;
import com.google.gson.Gson;
import org.apache.commons.lang.math.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

// 周期性的向Kafka发送消息的类
// Producer实例化对象保存到Spring容器才能实现Springboot的周期调用
@Component
public class Producer {


    // 这个对象会在SpringBoot启动时,自动装配到Spring容器,能够操作Kafka发送消息
    // 需要时,从Spring容器中注入(获取)即可
    // KafkaTemplate<[话题的类型],[发送消息的类型]>
    @Autowired
    private KafkaTemplate<String,String> kafkaTemplate;

    // 每隔10秒向kafka发送消息的方法
    int i=1;
    // 设置fixedRate周期运行,单位是毫秒 10000毫秒是10秒
    @Scheduled(fixedRate = 10000)
    // SpringBoot项目启动后,就会周期运行这个方法
    public void sendMessage(){
        //实例化一个CartTb对象,当做消息发送
        CartTb cart=new CartTb();
        cart.setId(i++);
        cart.setCommodityCode("PC100");
        cart.setPrice(RandomUtils.nextInt(350)+50);
        cart.setCount(RandomUtils.nextInt(10)+1);
        cart.setUserId("UU100");
        // 我们可以利用Gson类型对象,将cart对象转换为json格式字符串
        Gson gson=new Gson();
        String json=gson.toJson(cart);
        System.out.println("本次发送的消息为:"+json);
        // 执行发送
        kafkaTemplate.send("myCart",json);
    }


}
